package com.app.service;

import com.app.entity.dto.ReadingRecordDTO;
import com.app.entity.dto.AddCommentDTO;
import com.app.vo.CategoryVO;
import com.app.vo.BookTopicVO;
import com.app.vo.BookCollectionVO;
import com.app.vo.BookPageVO;
import com.app.vo.RecentBookVO;
import com.app.vo.BookInfoVO;
import com.app.vo.LikeResponseVO;
import com.app.vo.CollectResponseVO;
import com.app.vo.BookCommentVO;
import com.app.vo.AddCommentResponseVO;
import com.app.vo.FollowResponseVO;

import java.util.List;

public interface IHuibenService {

    List<CategoryVO> getBookCategories(String lang);

    /**
     * 获取推荐主题（小猪佩奇绘本集合或绘本列表）
     * 根据分类语言判断走绘本集还是绘本
     */
    List<BookTopicVO> getBookList(Long categoryId);

    /**
     * 获取绘本集详情（含绘本集合）
     * @param collectionId 绘本集ID
     * @return 绘本集详情
     */
    BookCollectionVO getBookCollectionDetail(Long collectionId);

    /**
     * 获取绘本页列表
     * @param bookId 绘本ID
     * @return 绘本页列表
     */
    List<BookPageVO> getBookPages(Long bookId);

    /**
     * 保存阅读记录
     * @param readingRecordDTO 阅读记录DTO
     * @return 是否保存成功
     */
    Boolean saveReadingRecord(ReadingRecordDTO readingRecordDTO);

    /**
     * 获取最近阅读的绘本列表
     * @return 最近阅读的绘本列表（最多6本）
     */
    List<RecentBookVO> getRecentBooks();

    /**
     * 获取绘本基本信息
     * @param bookId 绘本ID
     * @return 绘本基本信息
     */
    BookInfoVO getBookInfo(Long bookId);

    /**
     * 点赞/取消点赞绘本
     * @param bookId 绘本ID
     * @return 点赞响应信息
     */
    LikeResponseVO toggleBookLike(Long bookId);

    /**
     * 收藏/取消收藏绘本
     * @param bookId 绘本ID
     * @return 收藏响应信息
     */
    CollectResponseVO toggleBookCollect(Long bookId);

    /**
     * 获取绘本评论列表
     * @param bookId 绘本ID
     * @return 评论列表
     */
    List<BookCommentVO> getBookComments(Long bookId);

    /**
     * 新增评论
     * @param addCommentDTO 新增评论DTO
     * @return 新增评论响应信息
     */
    AddCommentResponseVO addBookComment(AddCommentDTO addCommentDTO);

    /**
     * 关注/取消关注用户
     * @param targetUserId 被关注用户ID
     * @return 关注响应信息
     */
    FollowResponseVO toggleUserFollow(Long targetUserId);
}

